// 文件 I/O 是对标准 POSIX 函数的简单封装。 通过 require('fs') 使用该模块。 所有的方法都有异步和同步的形式。
// 异步方法的最后一个参数都是一个回调函数。 传给回调函数的参数取决于具体方法，但回调函数的第一个参数都会保留给异常。 如果操作成功完成，则第一个参数会是 null 或 undefined。
// 当使用同步方法时，任何异常都会被立即抛出。 可以使用 try/catch 来处理异常，或让异常向上冒泡。

const fs = require('fs');

// 异步读取 执行回调
fs.readFile('./17-fs-readfile.js', 'utf8', (err, data) => {
  // 推荐
  if (err) {
    if (err.code === 'ENOENT') {
      console.log('myFile does not exitst');
      return;
    }
  }
  console.log('Async >>>>', data);
});

try {
  // 同步读取 堵塞主线程 
  // 执行完毕才有机会执行异步线程的任务队列
  // 因此大多数场景都不推荐使用同步方法
  const data = fs.readFileSync('./17-fs-readfile.js', 'utf8');
  if (data) {
    console.log('Sync >>>>', data);
  }
} catch (err) {
  console.log(err.name, err.message);
}
